package smartlifev30.com.sdk.api.service_app;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import smartlifev30.com.sdk.api.CallBack;
import smartlifev30.com.sdk.bean.response.LoginResponse;


/**
 * 网管用户
 * Created by tys on 2018/8/12.
 */

public interface IGatewayUser {


    /**
     * 服务器端根据网关SN号返回用户信息列表.（仅限管理员使用）
     *
     * @param userName
     * @param token
     * @param sn
     * @param callback
     */
    void listGatewayUser(@NonNull String userName, @NonNull String token, @NonNull String sn,
                         @NonNull CallBack<LoginResponse> callback);


    /**
     * 添加普通用户。（仅限管理员账号调用）
     *
     * @param userName
     * @param token
     * @param sn
     * @param phoneNum  被添加人电话
     * @param userAlias 被添加人别名(备注)
     * @param startTime 生效时间毫秒值, null代表始终有效
     * @param endTime   失效时间.. 有效持续时间???? 毫秒值, null代表始终有效
     * @param callback
     */
    void gatewayAddUser(@NonNull String userName, @NonNull String token, @NonNull String sn, @NonNull String phoneNum,
                        @NonNull String userAlias, @Nullable Long startTime, @Nullable Long endTime,
                        @NonNull CallBack<LoginResponse> callback);

    /**
     * 删除普通用户。（仅限管理员账号调用）
     *
     * @param userName
     * @param token
     * @param sn
     * @param phoneNum
     * @param callback
     */
    void gatewayDelUser(@NonNull String userName, @NonNull String token, @NonNull String sn, @NonNull String phoneNum,
                        @NonNull CallBack<LoginResponse> callback);


    /**
     * 编辑普通用户。（仅限管理员账号调用）
     *
     * @param userName
     * @param token
     * @param sn
     * @param phoneNum
     * @param userAlias
     * @param startTime
     * @param endTime
     * @param callback
     */
    void gatewayEditUser(@NonNull String userName, @NonNull String token, @NonNull String sn, @NonNull String phoneNum,
                         @NonNull String userAlias, @Nullable Long startTime, @Nullable Long endTime,
                         @NonNull CallBack<LoginResponse> callback);

    /**
     * 主用户权限转移。（仅限管理员用户账号调用）
     * 主用户可以转让权限给子用户，转让后前主用户自动变为子用户，前子用户自动变为主用户。
     * 如果子用户以前设置过授权时间，或者是打开过用户权限，那么在升级为主用户后，授权时间自动变为永久有效。
     *
     * @param userName
     * @param token
     * @param sn
     * @param phoneNum
     * @param callback
     */
    void gatewaySet2Admin(@NonNull String userName, @NonNull String token, @NonNull String sn, @NonNull String phoneNum,
                          @NonNull CallBack<LoginResponse> callback);

    /**
     * 子用户退出网关。（仅限子用户账号调用）
     * @param userName
     * @param token
     * @param sn
     * @param callback
     */
    void gatewayUserQuit(@NonNull String userName, @NonNull String token, @NonNull String sn, @NonNull CallBack<LoginResponse> callback);

    /**
     * 子用户申请加入网关. 同一个账户每天只能申请2次, 推送消息到主用户
     * @param userName
     * @param token
     * @param sn
     * @param gatewayAlias
     * @param callback
     */
    void gatewayUserJoin(@NonNull String userName, @NonNull String token, @NonNull String sn,
                         @NonNull String gatewayAlias, @NonNull CallBack<LoginResponse> callback);


    /**
     * 主用户操作申请的子用户（同意或拒绝）
     * @param userName
     * @param token
     * @param sn
     * @param phoneNum
     * @param gatewayAlias
     * @param action 0 拒绝 ， 1 同意
     * @param callback
     */
    void gatewayAdminApply(@NonNull String userName, @NonNull String token, @NonNull String sn,
                           @NonNull String phoneNum, @NonNull String gatewayAlias, @NonNull Integer action,
                           @NonNull CallBack<LoginResponse> callback);

}
